import fetch from 'node-fetch';
import searchName from '../src/search.js';
import randomFilePicker from '../src/random.js';

export class sender extends plugin {
    constructor() {
        super({
            name: '角色图库',
            dsc: '发送角色图片',
            event: 'message',
            priority: 500,
            rule: [
                {
                    reg: "^.*",
                    fnc: 'sendImage',
                },
            ]
        }),
            // 语录文本API（来源自网络公共API）
            this.textUrls = [
                'https://api.lovelive.tools/api/SweetNothings',
                'https://api.uomg.com/api/rand.qinghua?format=text'
            ]
        // 语录API索引
        this.textIndex = 0
    }

    // 发送图片
    async sendImage(e) {
        // 获取对应角色下的索引名称
        const name = searchName.findNameByAlias(e.msg);
        if (!name) {
            // 如果没有找到对应的角色名称，则不处理
            return false;
        }
        const fileUrl = await randomFilePicker.getFile(name);
        if (!fileUrl) {
            // 如果没有找到对应的图片文件，则不处理 
            return false;
        }

        // 获取语录文本
        let text = await this.fetchNextUrl();
        if (text) {
            text = text.replaceAll("<br>", "\n");
        }

        logger.info(`角色图库${fileUrl}`);
        //发送消息
        e.reply([text, segment.image(fileUrl)]);

        return true; //返回true 阻挡消息不再往下
    }

    // 获取语录文本
    async fetchNextUrl() {
        if (this.textIndex >= this.textUrls.length) {
            // 所有请求都完成了
            console.log("请求完毕！");
            return "";
        }
        try {
            let response = await fetch(this.textUrls[this.textIndex]);
            if (!response.ok) {
                // 如果响应不是成功的状态，则调用失败回调并继续请求下一个网址
                console.log(`服务器响应失败<${response.status}>: ${this.textUrls[this.textIndex]}`);
                return await this.fetchNextUrl(++this.textIndex);
            } else {
                // 如果响应成功，则调用成功回调并停止进一步的请求
                return await response.text();
            }
        } catch (error) {
            // 如果在请求过程中发生错误，则调用失败回调并继续请求下一个网址
            console.log(`请求发生错误[${this.textIndex}]: ${this.textUrls[this.textIndex]}`);
            return this.fetchNextUrl(++this.textIndex);
        }
    }
}